home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Tools / tables / tjoin / lex.l next >
Encoding:
Lex Description  |  1991-12-18  |  1.5 KB  |  80 lines

  1. %{
  2.  
  3.  
  4. #include        "y.tab.h"
  5.  
  6. #ifdef input
  7. #undef input
  8. #endif
  9. # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):bwgetc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
  10.  
  11. #define         HEAP            30      /*  cleans the heap after a YACC err */
  12. #define         NULL             0
  13.  
  14. extern  YYSTYPE             yylval;
  15. extern     int             Debug;
  16. extern    char            *av0;
  17. extern    char             *strdup();
  18.  
  19. static  char            buffer [1000];
  20. static  char            *buffptr = 0;
  21.  
  22. char                **memptr, *heapstore [HEAP];
  23.  
  24. %}
  25.  
  26. %%
  27.  
  28. #.*\n            ;
  29. [-a-zA-Z0-9\.]*         {
  30.                         yylval.str = strdup (yytext);
  31.                         return (STRING);
  32.                         }
  33.  
  34. \n                      {
  35.                         return ('\n');
  36.                         }
  37.  
  38. [,:()]            {
  39.             return (yytext [0]);
  40.             }
  41.  
  42. .            ;
  43.  
  44. %%
  45.  
  46.  
  47.  
  48. bwgetc (fp)
  49. FILE    *fp;
  50. {
  51.         if (buffptr == 0 || *buffptr == '\00') {
  52.                 if (fgets (&buffer [0], 999, fp) == NULL)
  53.                         return (EOF);
  54.                 buffptr = &buffer[0];
  55.                 memptr = &heapstore[0];
  56.                 *memptr = NULL;
  57.     }
  58.         return (*buffptr++);
  59. }
  60.  
  61. crapline()
  62. {
  63.         char    **p;
  64.     int    len;
  65.  
  66.     len = strlen (&buffer[0]);
  67.     if (len < 0)
  68.         --len;
  69.  
  70.         buffer [len] = '\00';
  71.  
  72.         for (p = &heapstore[0]; *p != NULL; p++) {
  73.         if ((Debug & 1) != 0)
  74.             printf ("Free %s - CrapLine\n", p);
  75.                 free (*p);
  76.         p = NULL;
  77.     }
  78.         fprintf (stderr, "*** Error [%s] line %d\n", &buffer [0], yylineno - 1);
  79. }
  80.